<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Access_Model extends CI_Model {
	
	public function isSuperAdmin($user_id) {
		$admin_id = $this->db->get('settings')->row()->user_id_superadmin;
		return ($user_id == $admin_id);
	}
	
	public function login($email, $password, &$user) {
		// tenta pegar o usuario do banco
		$this->db->where(array('email' => $email, 'password' => md5($password)));
		$user = $this->db->get('user')->row();
		
		// usuario inexistente
		if (!count($user))
			return 'Login falhou: E-mail e/ou senha não conferem.';
		
		// super admin pode logar mesmo sem possuir perfis
		if ($this->isSuperAdmin($user_id))
			return '';
		
		// checa se o usuario possui algum perfil
		$profiles = $this->db->get_where('user_x_profile', array('user_id' => $user->id))->result();
		if (!count($profiles))
			return 'Login falhou: Sua conta de usuário não possui nenhuma permissão de acesso. Contate o administrador.';
		
		return '';
	}
	
	// verifica se um usuário existe
	public function userExists ($email) {
		$this->db->where(array('email' => $email));
		
		if (!count($user))
			return 'E-mail não cadastrado.';
		
		return '';
	}
	
	public function hasRights($controller, $action) {
		// recupera a acao desejada e o id do usuario
		$this->db->where('uri', $controller.'/'.$action);
		$action = $this->db->get('user_action')->row();
		$user_id = $this->session->userdata('id');
		
		// acoes nao cadastradas nao serao visiveis (por um motivo obvio: seguranca)
		// 'Permissão negada: Página não cadastrada no sistema.'
		if (!count($action))
			return -2;
		
		// acoes publicas sao visiveis por qualquer usuario
		if ($action->public)
			return 1;
		
		// caso o usuario nao esteja logado
		// 'Permissão negada: Esta página requer que o login seja efetuado.'
		if (!$user_id)
			return -1;
		
		// super admin pode entrar em qualquer pagina cadastrada
		if ($this->isSuperAdmin($user_id))
			return 1;
		
		// seleciona os perfis que permitem ao usuario visualizar a pagina requisitada
		$this->db->join('user_x_profile', 'user_x_profile.user_profile_id = user_profile_x_action.user_profile_id', 'inner');
		$this->db->where(array('user_profile_x_action.user_action_id' => $action->id, 'user_x_profile.user_id' => $user_id));
		$result = $this->db->get('user_profile_x_action')->result();
		
		// checa se o usuario possui algum perfil que o permita ver esta acao
		// 'Permissão negada: Você não tem permissão para acessar esta página.'
		if (!count($result))
			return 0;
		
		// permissao concedida
		return 1;
	}
}
